home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 17
/
CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso
/
CUCD
/
Programming
/
DiceSource
/
lib
/
setjmp
/
setjmp.a
next >
Wrap
Text File
|
1994-02-01
|
1KB
|
46 lines
; SETJMP.A
;
; (c)Copyright 1990-91, Matthew Dillon, All Rights Reserved
;
; revised to add current __stk_base
section text,code
xdef _setjmp
xdef _longjmp
xref __stk_base
xref __CStackFree
xref __AbortLockout
_setjmp
move.l 4(sp),A0 ; jmp_buf (16 longwords)
move.l (sp),A1 ; return address
movem.l D2-D7/A1-A7,(A0)
move.l __stk_base(A4),52(A0) ;[4] = current stk base
moveq.l #0,D0 ; direct call returns 0
rts
_longjmp
move.w #0,__AbortLockout(A4) ; clear abort lockout
addq.l #4,sp ; skip rts
move.l (sp)+,A2 ; jmp_buf
move.l (sp)+,D2 ; ret-value, disallow 0
bne lj0
moveq.l #1,D2
lj0 move.l 48(A2),A7 ; restore stack immediately
move.l 52(A2),A3 ; original stack base
lj1 cmp.l __stk_base(A4),A3
beq lj10
jsr __CStackFree(pc) ; free stacks until ok
bra lj1
lj10
move.l A2,A0 ; restore frame
move.l D2,D0
movem.l (A0),D2-D7/A1-A7
move.l A1,(sp) ; set up return address
rts
END